package com;

import java.io.*;
import java.util.Vector;

/**
 * @author 吴宇~
 * @motto 我亦无他，唯手熟尔。
 * @edition jdk1.8
 * @reflection 0-1 喧闹任其喧闹，自由我自为之，我自风情万种，与世无争。
 * @person Han Xiaojiu
 */
//该类用于记录相关的信息
public class Recorder {


    //定义变量，记录我方击毁敌人的坦克数
    private static int allEnemyTankNum = 0;
    private static BufferedWriter bw = null;
    //以上变量准备写文件到文件中
//    private static String recordFile = "D:\\ideaa\\坦克大战数据\\recordFile.txt";
    //按理来说文件位置不应该在这儿，应该跟随文件位置
    private static String recordFile = "recordFile.txt";
    //但是为什么报错呢


    //定义一个属性，通过set烦恼发得到敌人坦克的Vector,指向My敌人坦克的向量，体现了java的类与类
    //之间的关系。java封装的四思想，其实也算java的补丁，直接访问呢不到呢，所以只能这样了
    private static Vector<EnemyTank> enemyTanks = null;
    //定义一个Node类型的Vector
    private static Vector<Node> nodes=new Vector<Node>();

    //这加一个输入流。
    private static BufferedReader br=null;

    //返回记录文件的位置
    public static String getRecordFile() {
        return recordFile;
    }

    public static void setRecordFile(String recordFile) {
        Recorder.recordFile = recordFile;
    }

    //增加一个方法用于读取文件，恢复相关的信息
    //该方法在就继续上局游戏的时候调用
    public static Vector<Node> getNodesAndEnemyTankRec(){
        try {
            br=new BufferedReader(new FileReader(recordFile));
            allEnemyTankNum=Integer.parseInt(br.readLine());
            //循环读取文件生成
            String Line="";
            while((Line=br.readLine())!=null){
                String[] s = Line.split(" ");
                Node node = new Node(Integer.parseInt(s[0]), Integer.parseInt(s[1]), Integer.parseInt(s[2]));
                nodes.add(node);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return nodes;
    }

    public static Vector<EnemyTank> getEnemyTanks() {
        return enemyTanks;
    }

    public static void setEnemyTanks(Vector<EnemyTank> enemyTanks) {
        Recorder.enemyTanks = enemyTanks;
    }

    public static int getAllEnemyTankNum() {
        return allEnemyTankNum;
    }

    public static void setAllEnemyTankNum(int allEnemyTankNum) {
        Recorder.allEnemyTankNum = allEnemyTankNum;
    }

    //当我方坦克击毁一辆敌人坦克
    public static void addAllEnemyTankNum() {
        Recorder.allEnemyTankNum++;
    }

    //增加一个方法，当游戏退出时，我们将allEnemyTankNum值保存到recordFile.txt中
    public static void keepRecord() {
        //对这个方法进行升级，保存敌人坦克的位置和方向
        try {
            bw = new BufferedWriter(new FileWriter(recordFile));
            //这儿得加上一个""代表传入的是一个字符
            bw.write(allEnemyTankNum + "");
            bw.newLine();
            for (int i = 0; i < enemyTanks.size(); i++) {
                //取出敌人坦克
                EnemyTank enemyTank = enemyTanks.get(i);
                if (enemyTank.isLive) {//还是判断一下好
                    //保存信息.
                    String record=enemyTank.getX()+"" + " " + enemyTank.getY()+"" + " " + enemyTank.getDirect() + "";
                    //写入到文件
                    bw.write(record);
                    bw.newLine();
                }
            }
            //遍历敌人坦克的Vector

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
